/*
 * @Descripttion: 组件业务名
 * @version:
 * @Author: lhl
 * @Date: 2024-11-16 11:39:56
 * @LastEditors: lhl
 * @LastEditTime: 2024-11-17 23:29:40
 */
import { defineConfig, loadEnv } from 'vite';
import type { UserConfig, ConfigEnv } from 'vite';
import react from '@vitejs/plugin-react';
import { resolve } from 'path';
import ViteRestart from 'vite-plugin-restart';
import { viteMockServe } from 'vite-plugin-mock';
const isDev = process.env.NODE_ENV === 'development';
// https://vite.dev/config/
export default defineConfig(({ command, mode }: ConfigEnv): UserConfig => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  // 设置第三个参数为 '' 来加载所有环境变量，而不管是否有 `VITE_` 前缀。
  const env = loadEnv(mode, process.cwd(), '');
  const isProd = mode === 'production';
  return {
    define: {
      __APP_ENV__: JSON.stringify(env),
      __APP_BASE_URL__: JSON.stringify(env.VITE_APP_BASE_URL),
    },
    plugins: [
      react(),
      isDev &&
        viteMockServe({
          mockPath: 'mock',
          // 根据项目配置。可以配置在.env文件
          enable: command === 'serve', // 只有开发环境才开启mock
          watchFiles: true,
          logger: true, //是否在控制台显示请求日志
        }),
      ViteRestart({
        // 一般就是这两个文件
        restart: ['vite.config.ts', '.env.development'],
      }),
    ],
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
      },
      extensions: ['.cjs', '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
    },
    css: {
      preprocessorOptions: {
        less: {
          javascriptEnabled: true, // 支持内联 JavaScript
          modifyVars: {
            // 在这里自定义主题色等变量
            '@primary-color': '#1890ff',
          },
        },
      },
    },
    server: {
      // 端口配置
      port: 3000,
      // 自动打开浏览器
      open: true,
      host: '0.0.0.0', // 允许跨域访问，解决开发环境跨域问题，0.0.0.0代表任意ip都可以访问，生产环境设置为false
      // 代理
      // proxy: {
      //   '/api': {
      //     target: 'https://api.youlai.tech/api/v1',
      //     changeOrigin: true,
      //     rewrite: (path) => path.replace(/^\/api/, ''),
      //   },
      // },
    },
    build: {
      assetsInlineLimit: 1024 * 10, // 静态资源大小限制 10kb 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求
      // 将 chunkSizeWarningLimit 设置为适合的值以便警告潜在的性能问题 chunk 大小警告的限制 500KB
      chunkSizeWarningLimit: 500,
      // 是否生成 sourcemap
      sourcemap: isProd ? false : true, // 生产环境不生成 sourcemap
    },
  };
});
